// 导入登录接口函数
import { loginAPI, getUserProfileAPI, getUserInfoAPI } from '@/api/user'

import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = () => {
  return {
    // token用户令牌
    // 刷新页面的时候，从本地去token 借助逻辑或短路
    token: getToken() || '',
    // 存储用户信息
    userInfo: { }
  }
}

const mutations = {
  // 设置token
  setToken: (state, token) => {
    state.token = token
    // 本地在存一份 token
    setToken(token)
  },
  // 设置用户信息
  setUserInfo: (state, userInfo) => {
    state.userInfo = userInfo
  },
  // 清空token
  removeToken: (state) => {
    state.token = ''
    // 清空本地 token
    removeToken()
  },
  // 清空用户信息
  removeuserInfo: (state) => {
    state.userInfo = { }
  }
}

const actions = {
  // 登录action
  loginAction: async({ commit }, LoginForm) => {
    // 调接口发起登录请求
    const resp = await loginAPI(LoginForm)
    // 提交 mutations
    commit('setToken', resp.data)
  },
  // 获取用户信息 action
  getUserInfoAction: async({ commit }) => {
  // 调接口 发请求
    const { data: userProfile } = await getUserProfileAPI()
    // 基于此次接口返回userId继续发起第二次请求(获取用户头像等信息)
    const { data: uesrInfo } = await getUserInfoAPI(userProfile.userId)
    // 合并
    const userObj = { ...userProfile, ...uesrInfo }
    // 提交 mutation
    // { ...userProfile, ...uesrInfo } 两个对象合并作为参数传给mutation函数
    commit('setUserInfo', userObj)
    // 返回 userObj
    return userObj
  },
  // 退出登录action
  logoutAction: ({ commit }) => {
    commit('removeToken')
    commit('removeuserInfo')

    // 重置路由实例(把路由表中的路由信息删除)
    resetRouter()
    // 清空vuex中路由数组
    commit('route/removeRoutes', null, {
    // 从全局出发
      root: true
    })
    // 重置主题色
    commit('sttings/resetTheme', null, {
      root: true
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
